Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Баг авторизации api (приложения) #1223

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

trin4ik
Copy link
Contributor

@trin4ik trin4ik commented Jun 30, 2024

Проблема

Во всех апи, которые сопровождаются декоратором @api(require_auth=False), не происходит авторизации даже при желании и наличии. Т.е. все запросы с декоратором @api(require_auth=False) по умолчанию считают пользователя гостем и не пытаются его авторизовать.
https://github.com/vas3k/vas3k.club/blob/master/authn/decorators/api.py#L19

def api(require_auth=True, scopes=None):
    def decorator(view):
        @functools.wraps(view)
        def wrapper(request, *args, **kwargs):
            # check auth if needed
            if require_auth: # <-- проблема тут, если нет запроса на авторизацию, то она и не происходит
                # requests on behalf of apps (user == owner, for a simplicity)
                service_token = request.headers.get("X-Service-Token") or request.GET.get("service_token")
                if service_token:
                    request.me = user_by_service_token(service_token)

Как итог, запросы от apps с service_token`ом проходят как публичные, а значит скрывают текст поста.

Решение

Пытаться авторизовать пользователя до проверки, требуется авторизация для метода или нет. Учитывая, что попытка авторизации будет совершена только при наличии заголовков X-Service-Token/Authorize, проблем с лишними запросами не будет.
По сути я просто перенёс блок авторизации перед проверкой, нужна она вообще или нет.

До После
before after

@trin4ik trin4ik requested a review from vas3k as a code owner June 30, 2024 00:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant